package freedom.solution.app.restaurante.datatypes;

import java.util.ArrayList;
import freedom.solution.app.restaurante.imagedb.*;


import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

import freedom.solution.app.restaurante.datatypes.DBtables.Categoria;
import freedom.solution.app.restaurante.datatypes.DBtables.DetallePago;
import freedom.solution.app.restaurante.datatypes.DBtables.DetallePedido;
import freedom.solution.app.restaurante.datatypes.DBtables.Distrito;
import freedom.solution.app.restaurante.datatypes.DBtables.Estado;
import freedom.solution.app.restaurante.datatypes.DBtables.Familia;
import freedom.solution.app.restaurante.datatypes.DBtables.HistorialMesa;
import freedom.solution.app.restaurante.datatypes.DBtables.Igv;
import freedom.solution.app.restaurante.datatypes.DBtables.Mesa;
import freedom.solution.app.restaurante.datatypes.DBtables.Moneda;
import freedom.solution.app.restaurante.datatypes.DBtables.Mozo;
import freedom.solution.app.restaurante.datatypes.DBtables.Pago;
import freedom.solution.app.restaurante.datatypes.DBtables.Pedido;
import freedom.solution.app.restaurante.datatypes.DBtables.Perfil;
import freedom.solution.app.restaurante.datatypes.DBtables.Permiso;
import freedom.solution.app.restaurante.datatypes.DBtables.PermisoxPerfil;
import freedom.solution.app.restaurante.datatypes.DBtables.Presentacion;
import freedom.solution.app.restaurante.datatypes.DBtables.Producto;
import freedom.solution.app.restaurante.datatypes.DBtables.ProductoXRestaurante;
import freedom.solution.app.restaurante.datatypes.DBtables.Restaurante;
import freedom.solution.app.restaurante.datatypes.DBtables.Subcategoria;
import freedom.solution.app.restaurante.datatypes.DBtables.TipoPago;
import freedom.solution.app.restaurante.datatypes.DBtables.TipoPagoXPago;
import freedom.solution.app.restaurante.datatypes.DBtables.Usuario;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


public class DBclass extends SQLiteAssetHelper{
    
    private static final String TAG = "DBclass";
    private static final String DATABASE_NAME = "bd_restaurante";
    private static final int DATABASE_VERSION = 1;
    private SQLiteDatabase mDb;
	private ImageDbHelper mDbHelper;

    private Context _context;
            
    public DBclass(Context context){
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            _context = context;
    }
    
  /*    @Override
  public void onCreate(SQLiteDatabase db) {
    //Log.w(EasymenuNGActivity.TAG+"."+TAG,"Creating the database");
      db.execSQL(Usuario.CREATE_STATEMENT);
      db.execSQL(Categoria.CREATE_STATEMENT);
      db.execSQL(DetallePago.CREATE_STATEMENT);
      db.execSQL(DetallePedido.CREATE_STATEMENT);
      db.execSQL(Distrito.CREATE_STATEMENT);
      db.execSQL(Estado.CREATE_STATEMENT);
      db.execSQL(Familia.CREATE_STATEMENT);
      db.execSQL(HistorialMesa.CREATE_STATEMENT);
      db.execSQL(Igv.CREATE_STATEMENT);
      db.execSQL(Mesa.CREATE_STATEMENT);
      db.execSQL(Moneda.CREATE_STATEMENT);
      db.execSQL(Mozo.CREATE_STATEMENT);
      db.execSQL(Pago.CREATE_STATEMENT);
      db.execSQL(Pedido.CREATE_STATEMENT);
      db.execSQL(Permiso.CREATE_STATEMENT);
      db.execSQL(PermisoxPerfil.CREATE_STATEMENT);
      db.execSQL(Presentacion.CREATE_STATEMENT);
      db.execSQL(Producto.CREATE_STATEMENT);
      db.execSQL(ProductoXRestaurante.CREATE_STATEMENT);
      db.execSQL(Restaurante.CREATE_STATEMENT);
      db.execSQL(Subcategoria.CREATE_STATEMENT);
      db.execSQL(TipoPago.CREATE_STATEMENT);
      db.execSQL(TipoPagoXPago.CREATE_STATEMENT);
      
    
    
      }*/

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion
              + ", which will destroy all old data");
      db.execSQL("DROP TABLE IF EXISTS " + Usuario.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Categoria.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + DetallePago.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + DetallePedido.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Distrito.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Estado.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Familia.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + HistorialMesa.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Igv.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Mesa.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Moneda.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Mozo.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Pago.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Pedido.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Perfil.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Permiso.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + PermisoxPerfil.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Presentacion.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Producto.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + ProductoXRestaurante.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Restaurante.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + Subcategoria.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + TipoPago.TAG);
      db.execSQL("DROP TABLE IF EXISTS " + TipoPagoXPago.TAG);
      
      
    
      onCreate(db);
  }
  
  public ArrayList<DBUsuario> getUsuarios(String user, String pass){
      
      String rawQuery;
      
      rawQuery = "select * from usuario where usuario.usuario='"+user+"' and usuario.contrasena='"+pass+"'";
      
      Cursor cur = getReadableDatabase()
                    .rawQuery(rawQuery,null);
      ArrayList<DBUsuario> dbusuarios = new ArrayList<DBUsuario>();
      cur.moveToFirst();
      
      while(!cur.isAfterLast()){
             
              DBUsuario dbr = new DBUsuario();
              dbr.setUsuario(cur.getString(0));
              dbr.setId_Perfil(cur.getInt(1));
              dbr.setId_Estado(cur.getInt(2));
              dbr.setContrasena(cur.getString(3));
          
             
              dbusuarios.add(dbr);
              cur.moveToNext();
      }
      cur.close();
      return dbusuarios;
  }

   public ArrayList<DBMesa> getMesas() {
	// TODO Auto-generated method stub
	   String rawQuery;
	      
	      rawQuery = "select * from mesa";
	      
	      Cursor cur = getReadableDatabase()
	                    .rawQuery(rawQuery,null);
	      ArrayList<DBMesa> dbmesa = new ArrayList<DBMesa>();
	      cur.moveToFirst();
	      
	      while(!cur.isAfterLast()){
	             
	              DBMesa dbr = new DBMesa();
	              dbr.setId_mesa(cur.getInt(0));
	              dbr.setId_estado(cur.getInt(1));
	              dbr.setCapacidad(cur.getInt(2));
	              dbr.setNumero(cur.getString(3));
	          
	             
	              dbmesa.add(dbr);
	              cur.moveToNext();
	      }
	      cur.close();
	      return dbmesa;
   }
 
    
	
	
	public void actualizarFotoProducto(String producto, byte[] image){
    	String rawQuery;
    	
    	String where = "id_producto = ?";
      	 String[] args = {producto};
      	 SQLiteDatabase db = getWritableDatabase();
      	 try{
       		ContentValues reg = new ContentValues();
       		reg.put("foto", image);
       		
       		db.update("producto", reg, where, args);
       	
       		Log.i("DBCLASSES", "Foto Modificada ***************************");
       		
       	}catch(SQLException ex){
       		ex.printStackTrace();
       		Log.i("DBCLASSES", "Foto Modificada  NOOO***************************");
       	}
      	 db.close();
    }
	
	private ContentValues createContentValues(byte[] image) {
		ContentValues cv = new ContentValues();
		cv.put("foto", image);
		return cv;
	}
	
	
	public ArrayList<DBProducto> obtenerProductos(){
        String rawQuery;
        
        rawQuery= "select * from  producto";
        
        Cursor cur = getReadableDatabase().rawQuery(rawQuery,null);
        ArrayList<DBProducto> productos = new ArrayList<DBProducto>();
        cur.moveToFirst();
        
        while(!cur.isAfterLast()){
               
                DBProducto dbing = new DBProducto();
                dbing.setId_producto(cur.getInt(0)); 
                dbing.setId_subcategoria(cur.getInt(1));
                dbing.setId_presentacion(cur.getInt(2));
                dbing.setId_estado(cur.getInt(3));
                dbing.setNombre(cur.getString(4));
                dbing.setDescripcion(cur.getString(5));
                dbing.setFoto(cur.getBlob(6));
                dbing.setPrecio(cur.getDouble(7));
                dbing.setIngredientes(cur.getString(8));
                 
                productos.add(dbing);
                cur.moveToNext();
        }
        cur.close();
        return productos;
   	
    }

	public ArrayList<DBProducto> obtenerProductoXCodigo(int id_producto) {
		// TODO Auto-generated method stub
		  String rawQuery= "select * from  producto where id_producto='"+id_producto+"'";
	        
	        Cursor cur = getReadableDatabase().rawQuery(rawQuery,null);
	        ArrayList<DBProducto> productos = new ArrayList<DBProducto>();
	        cur.moveToFirst();
	        
	        while(!cur.isAfterLast()){
	               
	                DBProducto dbing = new DBProducto();
	                dbing.setId_producto(cur.getInt(0)); 
	                dbing.setId_subcategoria(cur.getInt(1));
	                dbing.setId_presentacion(cur.getInt(2));
	                dbing.setId_estado(cur.getInt(3));
	                dbing.setNombre(cur.getString(4));
	                dbing.setDescripcion(cur.getString(5));
	                dbing.setFoto(cur.getBlob(6));
	                dbing.setPrecio(cur.getDouble(7));
	                dbing.setIngredientes(cur.getString(8));
	              
	                productos.add(dbing);
	                cur.moveToNext();
	        }
	        cur.close();
	        return productos;
	}

	public ArrayList<DBDetallePedido> getDetallePedido(int id_mesa) {
		  String rawQuery= "select * from  detallepedido where id_pedido=(select id_pedido from pedido where id_mesa='"+id_mesa+"')";
	        
	        Cursor cur = getReadableDatabase().rawQuery(rawQuery,null);
	        ArrayList<DBDetallePedido> dbdetallepedido = new ArrayList<DBDetallePedido>();
	        cur.moveToFirst();
	        
	        while(!cur.isAfterLast()){
	               
	                DBDetallePedido dbing = new DBDetallePedido();
	                dbing.setId_detalle_pedido(cur.getInt(0)); 
	                dbing.setId_pedido(cur.getInt(1));
	                dbing.setId_producto(cur.getInt(2));
	                dbing.setId_estado(cur.getInt(3));
	                dbing.setCantidad(cur.getInt(4));
	                dbing.setPrecio_unitario(cur.getDouble(5));
	                dbing.setSubtotal(cur.getDouble(6));
	             
	                dbdetallepedido.add(dbing);
	                cur.moveToNext();
	        }
	        cur.close();
	        return dbdetallepedido;
	}

	public String getNomProductoXCodigo(int id_producto) {
		 String rawQuery;
		   	rawQuery="select producto.nombre from  producto where producto.id_producto='"+id_producto+"'";
		   	
		   	Cursor cur= getReadableDatabase().rawQuery(rawQuery, null);
		   	String nompro="";
		   	
		   	cur.moveToFirst();
		   	if(cur.moveToFirst()){
		   		do{
		   			nompro=cur.getString(0);
		   		}
		   		while(cur.moveToNext());
		   
		   	}
		   	cur.close();
		   	return nompro;
	}
    
	

	
}
